(ns metabase.driver.mongo.operators
  "This namespace provides definitions of mongo operators.

   Namespace is a copy of monger's operator namespace.

   TODO: We should consider removing this namespace completely. Having it just adds need for maintaining list of
         operators monger provides. We could use keywords instead. Conversion code currently handles
         transformation of those into strings during transformations to document. More importantly -- we are already
         using keywords in lot of places in [[metabase.driver.mongo.query-processor]]. Try seraching it for `:\\$``
         regex.

   TODO should be addressed during follow-up of monger removal."
  {:clj-kondo/config '{:linters {:missing-docstring {:level :off}}}})

(def $gt "$gt")
(def $gte "$gte")
(def $lt "$lt")
(def $lte "$lte")
(def $all "$all")
(def $in "$in")
(def $nin "$nin")
(def $eq "$eq")
(def $ne "$ne")
(def $elemMatch "$elemMatch")
(def $regex "$regex")
(def $options "$options")
(def $comment "$comment")
(def $explain "$explain")
(def $hint "$hint")
(def $maxTimeMS "$maxTimeMS")
(def $orderBy "$orderBy")
(def $query "$query")
(def $returnKey "$returnKey")
(def $showDiskLoc "$showDiskLoc")
(def $natural "$natural")
(def $expr "$expr")
(def $jsonSchema "$jsonSchema")
(def $where "$where")
(def $and "$and")
(def $or "$or")
(def $nor "$nor")
(def $inc "$inc")
(def $mul "$mul")
(def $set "$set")
(def $unset "$unset")
(def $setOnInsert "$setOnInsert")
(def $setWindowFields "$setWindowFields")
(def $rename "$rename")
(def $push "$push")
(def $position "$position")
(def $each "$each")
(def $addToSet "$addToSet")
(def $pop "$pop")
(def $pull "$pull")
(def $pullAll "$pullAll")
(def $bit "$bit")
(def $bitsAllClear "$bitsAllClear")
(def $bitsAllSet "$bitsAllSet")
(def $bitsAnyClear "$bitsAnyClear")
(def $bitsAnySet "$bitsAnySet")
(def $exists "$exists")
(def $mod "$mod")
(def $size "$size")
(def $type "$type")
(def $not "$not")
(def $addFields "$addFields")
(def $bucket "$bucket")
(def $bucketAuto "$bucketAuto")
(def $collStats "$collStats")
(def $facet "$facet")
(def $geoNear "$geoNear")
(def $graphLookup "$graphLookup")
(def $indexStats "$indexStats")
(def $listSessions "$listSessions")
(def $lookup "$lookup")
(def $match "$match")
(def $merge "$merge")
(def $out "$out")
(def $planCacheStats "$planCacheStats")
(def $project "$project")
(def $redact "$redact")
(def $replaceRoot "$replaceRoot")
(def $replaceWith "$replaceWith")
(def $sample "$sample")
(def $limit "$limit")
(def $skip "$skip")
(def $unwind "$unwind")
(def $group "$group")
(def $sort "$sort")
(def $sortByCount "$sortByCount")
(def $currentOp "$currentOp")
(def $listLocalSessions "$listLocalSessions")
(def $cmp "$cmp")
(def $min "$min")
(def $max "$max")
(def $avg "$avg")
(def $stdDevPop "$stdDevPop")
(def $stdDevSamp "$stdDevSamp")
(def $sum "$sum")
(def $let "$let")
(def $first "$first")
(def $last "$last")
(def $abs "$abs")
(def $add "$add")
(def $ceil "$ceil")
(def $divide "$divide")
(def $exp "$exp")
(def $floor "$floor")
(def $ln "$ln")
(def $log "$log")
(def $log10 "$log10")
(def $multiply "$multiply")
(def $pow "$pow")
(def $round "$round")
(def $sqrt "$sqrt")
(def $subtract "$subtract")
(def $trunc "$trunc")
(def $literal "$literal")
(def $arrayElemAt "$arrayElemAt")
(def $arrayToObject "$arrayToObject")
(def $concatArrays "$concatArrays")
(def $filter "$filter")
(def $indexOfArray "$indexOfArray")
(def $isArray "$isArray")
(def $map "$map")
(def $objectToArray "$objectToArray")
(def $range "$range")
(def $reduce "$reduce")
(def $reverseArray "$reverseArray")
(def $zip "$zip")
(def $mergeObjects "$mergeObjects")
(def $allElementsTrue "$allElementsTrue")
(def $anyElementsTrue "$anyElementsTrue")
(def $setDifference "$setDifference")
(def $setEquals "$setEquals")
(def $setIntersection "$setIntersection")
(def $setIsSubset "$setIsSubset")
(def $setUnion "$setUnion")
(def $strcasecmp "$strcasecmp")
(def $substr "$substr")
(def $substrBytes "$substrBytes")
(def $substrCP "$substrCP")
(def $toLower "$toLower")
(def $toString "$toString")
(def $toUpper "$toUpper")
(def $concat "$concat")
(def $indexOfBytes "$indexOfBytes")
(def $indexOfCP "$indexOfCP")
(def $ltrim "$ltrim")
(def $regexFind "$regexFind")
(def $regexFindAll "$regexFindAll")
(def $regexMatch "$regexMatch")
(def $rtrim "$rtrim")
(def $split "$split")
(def $strLenBytes "$strLenBytes")
(def $subLenCP "$subLenCP")
(def $trim "$trim")
(def $sin "$sin")
(def $cos "$cos")
(def $tan "$tan")
(def $asin "$asin")
(def $acos "$acos")
(def $atan "$atan")
(def $atan2 "$atan2")
(def $asinh "$asinh")
(def $acosh "$acosh")
(def $atanh "$atanh")
(def $radiansToDegrees "$radiansToDegrees")
(def $degreesToRadians "$degreesToRadians")
(def $convert "$convert")
(def $toBool "$toBool")
(def $toDecimal "$toDecimal")
(def $toDouble "$toDouble")
(def $toInt "$toInt")
(def $toLong "$toLong")
(def $toObjectId "$toObjectId")
(def $dayOfMonth "$dayOfMonth")
(def $dayOfWeek "$dayOfWeek")
(def $dayOfYear "$dayOfYear")
(def $hour "$hour")
(def $minute "$minute")
(def $month "$month")
(def $second "$second")
(def $millisecond "$millisecond")
(def $week "$week")
(def $year "$year")
(def $isoDate "$isoDate")
(def $dateFromParts "$dateFromParts")
(def $dateFromString "$dateFromString")
(def $dateToParts "$dateToParts")
(def $dateToString "$dateToString")
(def $isoDayOfWeek "$isoDayOfWeek")
(def $isoWeek "$isoWeek")
(def $isoWeekYear "$isoWeekYear")
(def $toDate "$toDate")
(def $ifNull "$ifNull")
(def $cond "$cond")
(def $switch "$switch")
(def $geoWithin "$geoWithin")
(def $geoIntersects "$geoIntersects")
(def $near "$near")
(def $nearSphere "$nearSphere")
(def $geometry "$geometry")
(def $maxDistance "$maxDistance")
(def $minDistance "$minDistance")
(def $center "$center")
(def $centerSphere "$centerSphere")
(def $box "$box")
(def $polygon "$polygon")
(def $slice "$slice")
(def $text "$text")
(def $meta "$meta")
(def $search "$search")
(def $language "$language")
(def $currentDate "$currentDate")
(def $isolated "$isolated")
(def $count "$count")
